XTTS(Cross Platform Incremental Backup) 的测试例子
对于数据库的跨平台迁移,大家所熟悉的方法有很多,例如传统的传输表空间技术(TTS),如果是10gR2+ 版本,字节序相同的话,那么还能进行 rman convert database。甚至使用其他的第三方数据同步软件,例如 GoldenGate,DSG,DDS,shareplex 等等。
对于上述的技术,各有相互的优势,对于数据的逻辑迁移,后面的数据校对工作是比较麻烦的。
因此,对于数据迁移,我个人还是更倾向去使用物理迁移。convert database 功能限制太多,必须要去源端和目标端字节序一致,如果是字节序不同,例如从 AIX 迁移至 Linux(x86),那么只能通过 TTS 来操作。
对于传统的 TTS,如果数据量较大的情况下,很难满足要求,为此 Oracle 提供了增强版的 XTTS 功能,可以进行增量操作,这可以最大程度的降低停机时间。这一功能之前 Oracle 仅仅针对 exadata 开发,后面对于非 exadata 环境也可以进行使用了。
对于 XTTS 的增量操作,Oracle 提供了2种方式来进行,分别如下:
1)dbms_file_transfer
2)RMAN 备份
对于第一种方法,要求目标端数据库版本必须是 11.2.0.4 以及更新的版本。如果数据库版本低于 11.2.0.4,那么只能使用第2种方式。即使使用第2种方法,如果数据库版本低于 11.2.0.4,那么目标端环境,仍然需要安装 11.2.0.4 以及更新版本的临时环境。因为XTTS增量的核心脚本功能必须是基于11.2.0.4(+)版本。
如下是我的一个简单测试,是基于 RMAN 备份的方式,供参考!
1. 目标端安装 11.2.0.4 软件环境(如果不用 ASM,那么不需要安装 grid)
该步骤略.
2. 目标端准备 convert Instance(以及修改相关的环境变量)
注意,只需要将辅助实例启动到 nomount 状态即可.
3. 源端解压 rman convert 脚本
4. 源端修改 xtt.properties 内容
说明:
tablespaces:表示你需要传输的表空间名称
platformid: 表示源端平台编号,该值可以从 v$transportable_platform 获取
5. 源端运行 perl 脚本,准备 Prepare 操作
该操作执行完毕之后,会在 xtts 目录下产生几个文件,其中 xttplan.txt 文件中的内容如下:
该文件中的数值,数据库的 SCN。如果后面再次运行脚本进行增量操作时,该值会发现改变。
上述脚本是 perl 脚本产生的 rman convert 脚本,需要将该脚本传递到目标端主机。注意,上述脚本文件格式需要注意,同时并行度是默认的,可以进行调整。
6. 将数据文件传输到目标端
这里你可以直接使用如下的方式进行 scp:scp oracle11@133.37.253.3:/telephone_cdr/oracle11203/dfcopydir/TEST_TAB_5.tf /ogg/11204/xtts
我这里直接进行 ftp 传递,因为 scp 有问题,操作如下:
7. 将源端的 rman convert 脚本传到目标端
这里在传递文件的时候,将源端的 xtts 目录下的所有文件都传递到目标端。如果直接在目标端解压 rmancovert 程序,那么还需要修改相关的配置文件,以及将源端的 xttplan.txt 等传过来。
我这里省略了传递其他文件的步骤:
8. 目标端进行数据文件的转换
转换之后,如下:
[ora1124@cszwbdb1 xtts]$ cd test/
[ora1124@cszwbdb1 test]$ ls -ltr
total 1048588
-rw-r—– 1 ora1124 dba 1073750016 Feb 10 10:19 TEST_TAB_5.xtf
[ora1124@cszwbdb1 test]$
9. 创建增量数据(源端数据库)
10. 源端数据库创建增量备份
上述步骤的增量备份信息,会写入到如下 txt 文件中。
11. 将增量备份信息传到目标端
将 $/telephone_cdr/oracle11203/backup/0hputq9s_1_1 传到目标端:
注意:这里传递增量数据信息的时候,还需要将源端 xtts 目录下的 xttplan.txt,以及 tsbkupmap.txt 文件都传输到目标端。每当你进行一次增量的备份操作,这2个文件的内容都会发现变化。每一次增量操作之后,都需要将这2个文件传到目标端数据库的 xtts 目录中。
对于一个比较大量的系统来讲,上述的增量操作,我们可以进行多次。假设我们进行了多次操作之后,在停机时间的时候,再将源端数据库中需要传输的表空间设置为只读模式,如下:
12. 源端数据库最后一次增量操作
13. 目标端进行增量转换和数据写入同步
在测试的过程中,发现了不少的问题,需要进行排除,最后发现该脚本本身提供了 debug 功能,如下:
说明:我们可以看到关键性的操作已经关闭,之所以后面会报 ORA-00205 错误,是因为我们的用于转换的临时辅助实例 XTT 是 nomount 状态,是没有控制文件的,因此这个错误直接忽略之.
14. 最后将表空间相关的元数据插入到目标端数据库
该 perl 脚本本身提供了产生脚本的功能,如下:
产生的脚本内容在 /ogg/11204/xtts/xttplugin.txt 文件中,我们创建相关的 directory 和 network_link 即可。不过我这里创建 link 后,impdp 有问题,因此我直接通过 exp/imp 元数据的方式来进行了,如下:
15. 源端数据库,导致元数据
16. 目标端数据库导入元数据
1)首先创建相关的用户信息(其中 roger 用户是我的增量操作中创建的测试用户)
2) 导入元数据
17. 验证数据是否 OK
我们可以看到,最后我们的增量操作的数据,已经可以查询到了.
备注:在最近的一个运营商项目中,客户的2套 10TB 的 RAC,我计划使用该方法来进行迁移(AIX–>Linux)。
------ The End
文章来源:【love wife & love life —Roger 的 Oracle 技术博客】
配图来源:http://www.datstruct.com/images/dataMigration.jpg
2015 Oracle 技术嘉年华五折门票抢购中,长按上方图片识别二维码注册参会或者点击原文链接报名!
点击“阅读原文”查看原文章详情。